package xin.xihc.jba.core.utils;

import xin.xihc.utils.common.CommonUtil;

import java.lang.reflect.Field;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * JavaBean的字段缓存
 *
 * @author Leo Xi
 * @date 2020/5/9
 * @since 1.0
 **/
public class FieldCache {

    /** JavaBean的Field缓存Map */
    private static final LinkedHashMap<Class<?>, List<Field>> CLASS_FIELDS = new LinkedHashMap<>();

    private FieldCache() {
    }

    /**
     * 获取该类的所有字段（包含继承的）（不包含final、static的）
     *
     * @param clazz Class类型
     * @author Leo Xi
     * @date 2020/5/9
     * @since 0.0.1
     */
    public static List<Field> getAllFields(Class<?> clazz) {
        return CLASS_FIELDS.computeIfAbsent(clazz, k -> CommonUtil.getAllFields(clazz, false, false));
    }

    /**
     * 根据字段名称获取字段对象
     *
     * @param clazz     类型
     * @param fieldName 字段名
     * @return 未找到 - null,找到 - Field
     * @author Leo Xi
     * @date 2020/5/9
     * @since 0.0.1
     */
    public static Field getField(Class<?> clazz, String fieldName) {
        List<Field> allFields = getAllFields(clazz);
        return allFields.stream().filter(x -> x.getName().equalsIgnoreCase(fieldName)).findFirst().orElse(null);
    }

}